package FD;

import org.swixml.SwingEngine;

import javax.swing.*;

import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;

public class Gui {
	//public static DBConnect bDados = new DBConnect("data/produtos.txt", "data/facturas.txt", "data/linhas_factura.txt");
	public static DBConnect bDados = new DBConnect();
	JFrame popupFrame, gerirProduto;

	JMenuItem mb_gestao_produtos_gerir, guiSair, mb_gestao_fornecedores_gerir ,mb_gestao_Stocks,mb_fechar, mb_gestao_encomendas_gerir,mb_gestao_facturas_gerir,mb_gestao_produtos_listar, mb_gestao_facturas_listar, mb_gestao_fornecedores_listar, mb_gestao_encomendas_listar, mc_limpar_janela;
	JTextField loginPass, loginUser;
	JButton gerirProdutoCancelar, loginCancelar, loginValidar;
	Container gerirProdutoWindow;
	Container loginXml, gui; 
	JTextArea texto;
	final ImageIcon imageIcon = new ImageIcon("images/glasses_background.jpg");


	JScrollPane text = new JScrollPane()
	{
		Image	image	= imageIcon.getImage();

		{
			setOpaque(false);
		} // instance initializer

		public void paintComponent(Graphics g)
		{
			Point p = this.getLocation();
			g.drawImage(image, this.getWidth()-imageIcon.getIconWidth(), -p.y, this);
			super.paintComponent(g);
		}
	};


	private static final String	separador = "______________________________________________________________________________________________________________________________________________________________________________________________________________________________\n";

	public Gui() throws Exception {

		loginXml = new SwingEngine( this ).render("login.xml");
		loginXml.setLocation(600, 300);
		loginXml.setVisible( true );
	}

	public void arrancaGuiPrincipal() {
		try {
			gui = new SwingEngine( this ).render( "Gui.xml" );
			gui.setVisible( true );
			new Popup();

		} catch (Exception e1) {
			e1.printStackTrace();
		}
	}

	public Action AC_HELP = new AbstractAction() {
		public void actionPerformed(ActionEvent e){
			if (e.getSource() == mb_gestao_produtos_gerir){
				try {
					new GestaoProdutos(bDados);

				} catch (Exception e1) {}
			}
			else if(e.getSource() == mb_gestao_facturas_gerir){
				try {
					new GestaoFacturas();
				} catch (Exception e1) {}
			}
			else if(e.getSource() == mb_gestao_encomendas_gerir){
				try {
					new GestaoEncomendas(bDados);
				} catch (Exception e1) {}
			}
			else if(e.getSource() == mb_gestao_fornecedores_gerir){
				try {
					new GestaoFornecedores(bDados);
				} catch (Exception e1) {}
			}
			else if(e.getSource() == mb_gestao_Stocks){
				try {
					new GestaoStock(bDados);
				} catch (Exception e1) {

				}
			}
			else if(e.getSource() == mc_limpar_janela){
				texto.setText("");
			}


		}
	};

	public Action loginAction = new AbstractAction() {
		public void actionPerformed(ActionEvent e){
			if (e.getSource() == loginValidar){
				if(bDados.validarLogin(loginUser.getText().trim(), loginPass.getText().trim())){

					loginXml.setVisible(false);		
					arrancaGuiPrincipal();

				}
			}
			else if (e.getSource() == loginCancelar){
				System.exit(0);
			}
		}
	};

	public Action openAction = new AbstractAction() {
		public void actionPerformed(ActionEvent e){
			if (e.getSource() == guiSair)
				try {
					System.exit(0);
				} catch (Exception e1) {}
		}
	};


	public Action gestaoProdutosListarAction = new AbstractAction() {
		public void actionPerformed(ActionEvent e){
			if (e.getSource() == mb_gestao_produtos_listar)
				texto.setText("");
			try {
				texto.append(Produto.cabecalho() + "\n");
				texto.append("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
				for (Produto p : bDados.listarTodosOsProdutos())
					texto.append(p.valores() + "\n");
				texto.append(separador);
				texto.repaint();
			} catch (Exception e1) {}
		}
	};

	public Action gestaoEncomendasListarAction = new AbstractAction() {
		public void actionPerformed(ActionEvent e){
			if (e.getSource() == mb_gestao_encomendas_listar)
				texto.setText("");
			try {
				texto.append(Encomenda.cabecalhoEncomenda() + "\n");
				texto.append("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
				for (Encomenda x : bDados.listarEncomendas())
					texto.append(x.valoresEncomendas()+ "\n");
				texto.append(separador);
				texto.repaint();
			} catch (Exception e1) {}
		}
	};

	public Action gestaoFacturasListarAction = new AbstractAction() {
		public void actionPerformed(ActionEvent e){
			if (e.getSource() == mb_gestao_facturas_listar)
				texto.setText("");
			try {
				for (FacturaRecibo f : bDados.listarFacturas())
					texto.append(f + "\n");
				texto.append(separador);
			} catch (Exception e1) {}
		}
	};

	public Action gestaoFornecedoresListarAction = new AbstractAction(){
		public void actionPerformed(ActionEvent e){
			if (e.getSource() == mb_gestao_fornecedores_listar)
				texto.setText("");
			try {
				texto.append(Fornecedor.cabecalhoFornecedor() + "\n");
				texto.append("----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
				for (Fornecedor p : bDados.listarTodosOsFornecedores())
					texto.append(p.valoresFornecedores() + "\t\n");
				texto.append(separador);
				texto.repaint();
			} catch (Exception e1) {}
		}
	};
	public static void main( String[] args ) throws Exception {
		new Gui();
	}

}

